// 《围棋》作者版权所有。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// go:build ignore 

// 此程序生成zipdata。从$GOROOT/lib/time/zoneinfo开始。拉链
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

// 头放在生成的文件的开头。
// 字符串添加避免了
// 中的此文件（generate_zipdata.go）与“generated file”regexp匹配。
const header = `// 《围棋》作者版权所有。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

` + `// 由generate_zipdata生成的代码。不要编辑。

// 该文件包含一个嵌入式zip归档文件，其中包含时区
// 使用代码和数据编译的文件，这些代码和数据作为
// IANA时区数据库的一部分进行维护。
// IANA声称数据属于公共领域。

// 有关更多信息，请参阅
// https:
// ftp:
// https:

package tzdata

const zipdata = `

func main() {
	// 我们应该在$GOROOT/src/time/tzdata目录下运行。
	data, err := os.ReadFile("../../../lib/time/zoneinfo.zip")
	if err != nil {
		die("cannot find zoneinfo.zip file: %v", err)
	}

	of, err := os.Create("zipdata.go")
	if err != nil {
		die("%v", err)
	}

	buf := bufio.NewWriter(of)
	buf.WriteString(header)

	ds := string(data)
	i := 0
	const chunk = 60
	for ; i+chunk < len(data); i += chunk {
		if i > 0 {
			buf.WriteRune('\t')
		}
		fmt.Fprintf(buf, "%s +\n", strconv.Quote(ds[i:i+chunk]))
	}
	fmt.Fprintf(buf, "\t%s\n", strconv.Quote(ds[i:]))

	if err := buf.Flush(); err != nil {
		die("error writing to zipdata.go: %v", err)
	}
	if err := of.Close(); err != nil {
		die("error closing zipdata.go: %v", err)
	}
}

func die(format string, args ...any) {
	fmt.Fprintf(os.Stderr, format+"\n", args...)
	os.Exit(1)
}
